package com.chinaoly.sdk.util;

import android.util.Log;

/**
 * log 记录类.
 */
public final class LogUtils {


    /**
     * 标签.
     */
    private static final String TAG = "LogUtils";

    /**
     * 设置否是显示日志.
     */
    private static boolean isDebug = true;

    /**
     * 私有构造函数.
     */
    private LogUtils() {

    }

    /**
     * 获取当前日志记录周边信息.
     *
     * @return 具体信息
     */
    private static String getFunctionName() {

        StackTraceElement[] sts = Thread.currentThread().getStackTrace();
        for (StackTraceElement st : sts) {
            if (st.isNativeMethod()) {
                continue;
            }
            if (st.getClassName().equals(Thread.class.getName())) {
                continue;
            }
            if (st.getClassName().equals(LogUtils.class.getName())) {
                continue;
            }
            return "[ Thread:" + Thread.currentThread().getName() + ", at "
                    + st.getClassName() + "." + st.getMethodName()
                    + "(" + st.getFileName() + ":" + st.getLineNumber() + ")" + " ]";
        }
        return null;
    }

    /**
     * w 级别.
     *
     * @param msg msg
     */
    public static void w(final String msg) {
        if (isDebug) {
            Log.w(TAG, getMsgFormat(msg));
        }
    }

    /**
     * w 级别.
     *
     * @param tag 标签
     * @param msg msg
     */
    public static void w(final String tag, final String msg) {
        if (isDebug) {
            Log.w(tag, getMsgFormat(msg));
        }
    }

    /**
     * d 级别.
     *
     * @param msg msg
     */
    public static void d(final String msg) {
        if (isDebug) {
            Log.d(TAG, getMsgFormat(msg));
        }
    }

    /**
     * d 级别.
     *
     * @param tag 标签
     * @param msg msg
     */
    public static void d(final String tag, final String msg) {
        if (isDebug) {
            Log.d(tag, getMsgFormat(msg));
        }
    }

    /**
     * e 级别.
     *
     * @param msg msg
     */
    public static void e(final String msg) {
        if (isDebug) {
            Log.e(TAG, getMsgFormat(msg));
        }
    }

    /**
     * e 级别.
     *
     * @param tag 标签
     * @param msg msg
     */
    public static void e(final String tag, final String msg) {
        if (isDebug) {
            Log.e(tag, getMsgFormat(msg));
        }
    }

    /**
     * 输出格式定义.
     *
     * @param msg msg
     * @return 信息
     */
    private static String getMsgFormat(final String msg) {
        return msg + " ;" + getFunctionName();
    }

    /**
     * 用于设置是否显示日志.
     *
     * @param open 默认显示
     */
    public static void setIsDebug(final boolean open) {
        LogUtils.isDebug = open;
    }
}
